const fs = require('fs');
const path = require('path');
const archiver = require('archiver');
const axios = require('axios'); // 用于文件上传
const FormData = require('form-data'); // 用于构建表单数据
// 要压缩的文件夹
const distPath = path.resolve(__dirname, 'C:/Users/Administrator/Desktop/H5/众成智付展业端H5/dist');
// 压缩包输出路径
const outputPath = path.resolve(__dirname, 'C:/Users/Administrator/Desktop/H5/众成智付展业端H5/dist.zip');

// 创建输出流
const output = fs.createWriteStream(outputPath);

// 初始化 archiver 压缩对象
const archive = archiver('zip', {
    zlib: {
        level: 9 // 压缩级别（最大）
    }
});

// 监听压缩过程中的事件
output.on('close', async () => {
    console.log(`压缩完成，众成智付展业端，压缩包大小：${archive.pointer()} 字节`);
    try {
        // 压缩完成后上传文件
        let fileUrl = await uploadFile(outputPath);
        console.log('文件上传成功！文件地址：', fileUrl.newFileName);
        await submit(fileUrl.newFileName)
    } catch (error) {
        console.error('文件上传失败：', error.message);
    }
});

// 监听压缩过程中的错误
archive.on('error', (err) => {
    throw err; // 如果压缩过程中发生错误，则抛出异常
});

// 将压缩包与输出流关联
archive.pipe(output);

// 添加 dist 文件夹到压缩包
archive.directory(distPath, false);

// 完成压缩
archive.finalize();

// 文件上传函数
async function uploadFile(filePath) {
    const formData = new FormData();
    formData.append('file', fs.createReadStream(filePath)); // 将文件添加到表单数据中

    try {
        // 调用文件上传接口
        const response = await axios.post('http://mtpospay.com/prod-api/common/uploadApk', formData, {
            headers: {
                Authorization: 'Bearer eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6ImI2MmIyZDQ4LWNhMDYtNGY0Ni1iODMzLTFiZWUzYmJmMzBiZCJ9.m_8gTMS8EI9Yyifi9iZ0tKO-0GcCbbIf7HWjwc4JLMlU0KxdyNKxrDJAjib2jDrCCf_KGpfItkGLIpIV5hpEsw', // 替换为有效的 token
                ...formData.getHeaders(), // 添加 form-data 的默认 headers
            },
            maxBodyLength: 50 * 1024 * 1024, // 50MB 限制
            timeout: 600000, // 设置请求超时，单位为毫秒（10分钟）
        });

        // 返回上传成功后的服务器返回数据
        return response.data;
    } catch (error) {
        console.error('上传失败:', error.response ? error.response.data : error.message);
        throw new Error('文件上传失败');
    }
}
// 提交
async function submit(fileName) {
    // 请求的 API 地址
    const apiUrl = 'http://mtpospay.com/prod-api/system/appVersion/updateVersion'; // 替换为你的实际 URL

    // 要发送的数据
    const data = {
        id: 71, // 示例 id，替换为实际值
        updateType: 0, // 1-apk 更新类型，0-h5
        fileName: fileName // 示例文件名，替换为实际文件名
    };

    // 发送 POST 请求
    axios.post(apiUrl, data, {
            headers: {
                'Content-Type': 'application/json', // 确保内容类型为 JSON
                // 你还可以添加授权头等
                'Authorization': 'Bearer eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6ImI2MmIyZDQ4LWNhMDYtNGY0Ni1iODMzLTFiZWUzYmJmMzBiZCJ9.m_8gTMS8EI9Yyifi9iZ0tKO-0GcCbbIf7HWjwc4JLMlU0KxdyNKxrDJAjib2jDrCCf_KGpfItkGLIpIV5hpEsw', // 如果需要授权 token
            }
        })
        .then((response) => {
            // 成功响应
            console.log('众成智付展业端版本更新成功',response);
        })
        .catch((error) => {
            // 错误响应
            console.error('版本更新失败:', error.response ? error.response.data : error.message);
        });
}